package net.alche.al.util.alches;

import net.alche.al.util.AC;
import java.util.List;
import java.util.ArrayList;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

// String相关工具方法
public class ToolString {

  //
  // 将String转为 Integer 对象 String为空则返回null
  //
  // @param intValue
  // @return
  //
  public static Integer toInt(String intValue) {
    if (AC.isNotEmpty(intValue)) {
      return Integer.parseInt(intValue);
    }
    return null;
  }

  //
  // 分割字符串到List
  //
  // @param str 被分割的字符串
  // @param splitChar 分割符
  // @return
  //
  public List<Integer> toList(String str, String splitChar) {
    if (str == null) {
      return null;
    }
    List<Integer> list = new ArrayList<>();
    if (str.contains(splitChar) == false) {
      list.add(Integer.parseInt(str));
      return list;
    }
    String[] array = str.split(splitChar);
    for (String s : array) {
      try {
        list.add(Integer.parseInt(s));
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    return list;
  }

  //
  // 字符是否包含另一个字符 自动添加", xx ," indexOf( ',' + ',')
  //
  // @param txt
  // @param containTxt
  // @return
  //
  public boolean contain(String txt, String containTxt) {
    return ("," + txt + ",").indexOf("," + containTxt + ",") >= 0;
  }

  //
  // 以","分割字符串到List
  //
  // @param str 被分割的字符串
  // @return
  //
  public List<Integer> toList(String str) {
    return toList(str, ",");
  }

  //
  // 驼峰转下滑线
  //
  // @param str
  // @return
  //
  public String getUnderline(String str) {
    for (int i = 0; i < str.length(); i++) {
      char ch = str.charAt(i);
      if (ch >= 'A' && ch <= 'Z') {
        str = str.substring(0, i) + (i != 0 ? "_" : "") + (char) (ch + 32) + str.substring(i + 1, str.length());
      }
    }
    return str;
  }

  //
  // 下滑线转驼峰
  //
  // @param str
  // @return
  //
  public String getHump(String str) {
    for (int i = 0; i < str.length(); i++) {
      char ch = str.charAt(i);
      if (ch == '_') {
        if (i + 1 < str.length()) {
          str = str.substring(0, i) + (char) (str.charAt(i + 1) - 32) + str.substring(i + 2, str.length());
        } else {
          str = str.substring(0, str.length() - 1);
        }
        i++;
      }
    }
    return str;
  }

  //
  // 获取文本后缀
  //
  // @param str 文本内容
  // @param split 分割符"/","."等
  //
  public String getEnd(String str, String split) {
    if (str == null) {
      return "";
    }
    int index = str.lastIndexOf(split);
    if (index > 0) {
      return str.substring(index + 1, str.length());
    }
    return "";
  }

  public String pre(String str, String splitChar) {
    if (str == null) {
      return "";
    }
    int index = str.indexOf(splitChar);
    if (index > 0) {
      return str.substring(0, index);
    }
    return "";
  }

  public String preLast(String str, String splitChar) {
    if (str == null) {
      return "";
    }
    int index = str.lastIndexOf(splitChar);
    if (index > 0) {
      return str.substring(0, index);
    }
    return "";
  }

  public String suf(String str, String splitChar) {
    if (splitChar == null) {
      splitChar = "/";
    }
    int index = str.indexOf(splitChar);
    if (index >= 0) {
      return str.substring(index + splitChar.length(), str.length());
    }
    return "";
  }

  public String sufLast(String str, String splitChar) {
    if (splitChar == null) {
      splitChar = "/";
    }
    int index = str.lastIndexOf(splitChar);
    if (index >= 0) {
      return str.substring(index + splitChar.length(), str.length());
    }
    return "";
  }

  public String fmt(Object... params) {
    String str = "";
    for (int i = 0; i < params.length; i++) {
      Object obj = params[i];
      if (obj != null) {
        str += obj.toString();
      }
    }
    return str;
  }

  public String firstToUpperCase(String txt) {
    return txt.substring(0, 1).toUpperCase() + txt.substring(1, txt.length());
  }

  public static void main222(String[] args) {
    ToolString tool = new ToolString();
    System.out.println("str=" + tool.getHump("parent_code"));
  }

  // 获取异常的字符说明 */
  public String getExceptionMsg(Exception e) {
    try {
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      PrintStream printStream = new PrintStream(out);
      e.printStackTrace(printStream);
      String msg = new String(out.toByteArray(), "UTF-8");
      return msg;
    } catch (Exception ex) {
      ex.printStackTrace();
      return "convert Exception Msg failed!";
    }
  }

  public int lv(String str) {
    int lv = 0;
    if (str != null && !"".equals(str)) {
      for (int i = 0; i < str.length(); i++) {
        if (str.charAt(i) != ' ') {
          break;
        }
        lv = i;
      }
    }
    return lv;
  }
}